// 留言本入口程序

const http = require('http')
const fs = require('fs')
const mime = require('mime')
const template = require('art-template')
const url = require('url')

// 模拟评论数据
const comments = [
    { id: 1, name: '张三', content: 'React 太难了' },
    { id: 2, name: '李四', content: 'NodeJS 也太难了' }
]

// 创建服务器对象，并启动在 3000 端口
http.createServer((req, res) => {
    const path = url.parse(req.url, true)
    console.log(path)

    const pathname = path.pathname

    if (pathname === '/') {
        // 读取 ./template/index.html
        fs.readFile('./template/index.html', (err, data) => {
            if (err) console.log('对不起，您访问的资源错误')

            // 使用模板引擎替换内容
            const html = template.render(data.toString(), { comments })
            console.log(html)
            res.setHeader('Content-Type', 'text/html; charset=utf-8');
            res.end(html)
        })
    } else if (pathname === '/post') {
        fs.readFile('./template/post.html', (err, data) => {
            if (err) console.log('对不起，您访问的资源错误')
            
            res.setHeader('Content-Type', 'text/html; charset=utf-8');
            res.end(data)
        })
    } else if (pathname === '/pinglun') {
        // 把获取到的数据添加到 comments 数组中
        const comment = path.query
        comment.id = (comments.length + 1)
        comments.push(comment)

        // 响应数据给客户端
        // res.setHeader('Content-Type', 'application/json; charset=utf-8');
        // res.end(JSON.stringify(comments))

        // 重定向到首页
        // 如何通过服务器让客户端进行重定向
        // 1 状态码临时设置为 302
            // statusCode
        // 2 在响应头中通过 Location 告诉客户端往哪重定向
            // setHeader
        // 如果客户端发现收到的响应状态码是 302 就会自动去响应头中找 Location
        res.statusCode = 302
        res.setHeader('Location', '/')
        res.end()

    } else if (pathname.startsWith('/public')) {

        // 处理静态资源 我们约定静态资源统一放在 public 目录下
        fs.readFile(`.${pathname}`, (err, data) => {
            if (err) console.log('对不起，您访问的资源错误')
            
            // 使用 mime 获取文件类型
            const type = mime.getType(pathname)
            console.log(pathname, type)
            res.setHeader('Content-Type', type);
            res.end(data)
        })
    } else {
        // 跳转统一处理页面
        fs.readFile('./template/404.html', (err, data) => {
            if (err) console.log('对不起，您访问的资源错误')
            
            res.setHeader('Content-Type', 'text/html; charset=utf-8');
            res.end(data)
        })
    }
}).listen(3000, () => {
    console.log('Server running at port 3000')
})